home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / info-service / wais / ir-book-sources / bool / hash.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-08  |  2.3 KB  |  80 lines

  1. /***************************  hashing-bool-ops.h  *****************************
  2.  
  3.   Purpose:    External declarations for boolean operations implemented
  4.           using hashing.
  5.  
  6.   Provenance:    Written and tested by S. Wartik, April 1991.
  7.  
  8.   Notes:    None.
  9.  
  10. **/
  11.  
  12. #ifndef TRUE
  13. #   define TRUE 1
  14. #   define FALSE 0
  15.     typedef int boolean;
  16. #endif
  17.  
  18. typedef int    elementType;        /* This could be any valid type.      */
  19.  
  20. typedef struct be_str {            /* A link in the chain from a bucket. */
  21.     elementType     datum;        /* Implemented as a linked list.      */
  22.     struct be_str   *next_datum;
  23. } bucket_element;
  24.  
  25. typedef struct {        /* A hashing-based set implementation. */
  26.     int             Number_Of_Buckets;
  27.     bucket_element  **buckets;
  28.     int             (*hashing_function)(); /* The set's hashing function.    */
  29.     boolean         (*comparator)();       /* A tester for element equality. */
  30. } set;
  31.  
  32. #ifdef __STDC__
  33.  
  34. extern void Create(int Number_Of_Buckets,
  35.            int (*Hashing_Function)(),
  36.            boolean (*Comparator)(),
  37.            set *s);
  38.  
  39. extern void Clear(set *s);
  40. extern void Insert(set *s, elementType e);
  41. extern void Delete(set *s, elementType e);
  42.  
  43. extern void Unite(set *s1, set *s2, set *s3);
  44. extern void Intersect(set *s1, set *s2, set *s3);
  45. extern void Subtract(set *s1, set *s2, set *s3);
  46.  
  47. extern boolean Empty(set *s);
  48. extern boolean Member(set *s, elementType e);
  49.  
  50. extern void Copy(set *source, set *destination);
  51.  
  52. extern void Iterate(set *s, boolean (*f)());
  53.  
  54. boolean Error_Occurred();
  55.  
  56. #else
  57.  
  58. extern void Create();        /* Create a set.            */
  59.  
  60. extern void Clear();        /* Make a set contain zero elements.    */
  61. extern void Insert();        /* Insert an element into a set.    */
  62. extern void Delete();        /* Remove an element from a set.    */
  63.  
  64. extern void Unite();        /* Form the union of two sets.        */
  65. extern void Intersect();    /* Form the intersection of two sets.    */
  66. extern void Subtract();        /* Form the difference of two sets.    */
  67.  
  68. extern boolean Empty();        /* Return TRUE iff a set has zero elements. */
  69. extern boolean Member();    /* Return TRUE iff a specified value is    */
  70.                 /* a member of a set.            */
  71.  
  72. extern void Copy();        /* Make a copy of a set.        */
  73.  
  74. extern void Iterate();        /* Invoke a function on every element    *
  75.                 /* in a set.                */
  76.  
  77. extern boolean Error_Occurred(); /* Return TRUE iff the last        */
  78.                  /* operation caused an error.        */
  79. #endif
  80.